<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      #root {
        width: 100vw;
        height: 100vh;
        display: flex;
        justify-content: center;
        align-items: center;
        flex-wrap: wrap;
        gap: 20px;
      }
      .text {
        font-size: 24px;
        color: #fff;
        display: flex;
        justify-content: center;
        align-items: center;
        background-image: linear-gradient(
          45deg,
          #ff9a9e 0%,
          #fad0c4 99%,
          #fad0c4 100%
        );
        width: 200px;
        height: 200px;
        padding: 20px;
        border-radius: 20px;
        -webkit-user-select: none; /* Safari */
        -moz-user-select: none; /* Firefox */
        -ms-user-select: none; /* Internet Explorer/Edge */
        user-select: none; /* 标准语法 */
      }

      .text1 {
        color: #a8ccfc;
      }

      .text2 {
        color: #c7f882;
      }

      .text3 {
        color: #86f2bc;
      }

      .bg1 {
        background-image: linear-gradient(to top, #a18cd1 0%, #fbc2eb 100%);
      }

      .bg2 {
        background-image: linear-gradient(to top, #fad0c4 0%, #ffd1ff 100%);
      }

      .bg3 {
        background-image: linear-gradient(to right, #ffecd2 0%, #fcb69f 100%);
      }
    </style>
    <script src="../js/vue.js" type="text/javascript"></script>
  </head>
  <body>
    <!-- 
        绑定样式
        1. class样式
            写法：  字符串（变量）写法:
                    对象语法：{类名：布尔值}
                    数组语法：['类名1','类名2']
            注意：true表示应用，false表示不应用
            绑定class样式 字符串（变量）写法，适用于：样式的类名不确定，需要动态指定
            绑定class样式 数组写法，适用于：样式的类名不确定，个数也不确定，需要动态指定
            绑定class样式 对象写法写法，适用于：样式的类名确定，个数也确定，需要动态指定启用那些样式

        2. style样式
            写法：对象语法：{属性名：属性值}
                  数组语法：[{属性名：属性值},{属性名：属性值}]
                  
            绑定style样式 对象语法：{属性名：属性值}，属性名浏览器能够识别的css属性
            数组语法：[{属性名：属性值},{属性名：属性值}]
    -->

    <div id="root">
      <!-- 绑定class样式 字符串（变量）写法，适用于：样式的类名不确定，需要动态指定 -->
      <div class="text" :class="moon" @click="changeMoon">{{name}}</div>

      <!-- 绑定class样式 数组写法，适用于：样式的类名不确定，个数也不确定，需要动态指定 -->
      <div class="text" :class="moonAndText" @click="chageMoonAndText">
        {{name}}
      </div>

      <!-- 绑定class样式 对象写法写法，适用于：样式的类名确定，个数也确定，需要动态指定启用那些样式 -->
      <div class="text" stclass="classObj" @click="toggleText">{{name}}</div>

      <!-- 绑定style样式 对象语法：{属性名：属性值}，属性名浏览器能够识别的css属性 -->
      <div class="text" :style="styleObj">{{name}}</div>

      <!-- 绑定style样式数组语法：[{属性名：属性值},{属性名：属性值}]属性名浏览器能够识别的css属性 -->
      <div class="text" :style="styleArray">{{name}}</div>
    </div>

    <script type="text/javascript">
      new Vue({
        el: "#root",
        data: {
          name: "你好",
          moon: "bg1",
          moonAndText: ["bg1", "text1"],
          classObj: {
            text1: true,
            text2: false,
          },
          styleObj: {
            fontSize: "40px",
            color: "#d4dee3",
          },
          styleArray: [
            {
              fontSize: "40px",
              color: "#d4dee3",
            },
            {
              backgroundImage:
                "linear-gradient(to right, #ffecd2 0%, #fcb69f 100%)",
            },
          ],
        },
        methods: {
          changeMoon() {
            const moons = ["bg1", "bg2", "bg3"];
            const moonIndex = Math.floor(Math.random() * 3);
            this.moon = moons[moonIndex];
          },
          chageMoonAndText() {
            const moons = ["bg1", "bg2", "bg3"];
            const texts = ["text1", "text2", "text3"];
            const moonIndex = Math.floor(Math.random() * 3);
            const textIndex = Math.floor(Math.random() * 3);
            const moon = moons[moonIndex];
            const text = texts[textIndex];
            this.moonAndText.splice(0, 2, [moon, text]);
          },
          toggleText() {
            this.classObj.text1 = !this.classObj.text1;
            this.classObj.text2 = !this.classObj.text2;
          },
        },
      });
    </script>
  </body>
</html>
